<?php
/**
 * Description of ClienteAction
 *
 * @author Magno
 */
class ClienteAction extends ActionDefault{
    
    private $clienteService;
    private $estadoService;
    private $cidadeService;
    private $statusService;
    private $mediaService;
    
    public static $VIEW_CLIENTE = "view/cliente/";

    function __construct() {
        parent::__construct();
        $this->clienteService = new ClienteService();
        $this->estadoService = new EstadoService();
        $this->cidadeService = new CidadeService();
        $this->statusService = new StatusService();
        $this->mediaService = new MediaService();
    }

    public function buscar() {

    }
    
    public function cadastro() {
        parent::setValueOutput('estadosCivil', TiposGenericosService::listarEstadoCivil(true));
    }
    
    public function detalhes($clienteID) {

    }
    
    public function editar($clienteID) {
        try{

            if($clienteID <= 0){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Código do Cliente Não Encontrado!!!"));
                parent::voltar();
                return;
            }

            $clienteBean = $this->clienteService->buscarPorID($clienteID, false);

            if($clienteBean == null){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Cliente Não Encontrado!!!"));
                parent::voltar();
                return;
            }
            
            parent::setObjectOutput($clienteBean->getUsuario()); /** Dados do Usuario **/
            parent::setObjectOutput($clienteBean->getPessoa()); /** Dados da Pessoa **/
            parent::setObjectOutput($clienteBean->getPessoa()->getEndereco(), '', 'End'); /** Dados do Endereço **/
            
            parent::setValueOutput('avisosPorEmail', $clienteBean->getAvisosPorEmail());
            parent::setValueOutput('cidadeEnd', $clienteBean->getPessoa()->getEndereco()->getCidade()->getNome());
            parent::setValueOutput('estadoEnd', $clienteBean->getPessoa()->getEndereco()->getCidade()->getEstado()->getSigla());
            
            $this->cadastro();
            
            parent::show(ClienteAction::$VIEW_CLIENTE."cadastro.tpl");

        }catch(Exception $ex){
            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, $ex->getMessage()));            
            parent::voltar();
        }
    }
    
    public function excluir($clienteID) {
        try{

            if($clienteID <= 0){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Código do Cliente Não Encontrado!!!"));
                parent::voltar();
                return;
            }

            $clienteBean = $this->clienteService->buscarPorID($clienteID);

            if($clienteBean == null){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, "Cliente Não Encontrado!!!"));
                parent::voltar();
                return;
            }

            $clienteBean->setStatus($this->statusService->buscarPorID(Constantes::$ST_USU_EXCLUIDO));

            $this->clienteService->salvar($clienteBean);

            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_SUCCESS, Constantes::$STR_MSG_SUCCESS));
            parent::chain('ClienteAction.listar');

        }catch(Exception $ex){
            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, $ex->getMessage()));
            parent::voltar();
        }
    }
    
    public function listar() {
        parent::setValueOutput('status', Util::arrayCombo($this->statusService->listar(0, Constantes::$STATUS_USUARIO), 'statusID', 'descricao',' -- TODOS --'));
        $this->buscaListaPaginada();        
    }

    public function tabela($pagina = 1, $email = "", $login = "", $statusID = -1) {
        $this->buscaListaPaginada($pagina, $email, $login, $statusID);
        parent::show(ClienteAction::$VIEW_CLIENTE.'tabela.tpl');
    }
    
    private function buscaListaPaginada($pagina = 1, $email = "", $login = "", $statusID = -1){

        $clientes = $this->clienteService->listar($pagina, $email, $login, $statusID, false);
        $total = $this->clienteService->total($email, $login, $statusID);

        parent::setValueOutput('clientes', $clientes);
        parent::setValueOutput('pagina', $pagina); 
        parent::setValueOutput('numPaginas', Util::calculaNumPaginas($total));
        
    }
    
    public function salvar($usuarioBean) {
        try{

            $uploadService = new UploadService();

            $enderecoBean = parent::getObjectInput('EnderecoBean', '', 'End');
            $pessoaBean = parent::getObjectInput('PessoaBean');
            $usuarioID = intval(parent::getValueInput('usuarioID'));
            $statusBean = $this->statusService->buscarPorID(Constantes::$ST_USU_CADASTRADO);
            
            

            $cidadeBean = $this->cidadeService->buscarPorSiglaEstadoENome(parent::getValueInput('estadoEnd'), parent::getValueInput('cidadeEnd'));
            if($cidadeBean == null){
                parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, 'Cidade Não Encontrada!!!'));
                parent::voltar();
                return;
            }
            
            $enderecoBean->setCidade($cidadeBean);
            $pessoaBean->setEndereco($enderecoBean);
            
            $mediaBean = new MediaBean();
            
            if($usuarioID > 0){
                $usuarioService = new UsuarioService();
                $mediaBean = $usuarioService->buscarPorID($usuarioID, true)->getMedia();
            }
            
            $caminhoMedia = UploadService::salvarArquivoSimples('media',Constantes::$DIR_IMAGENS);

            if(strlen($caminhoMedia) <= 0){
                $caminhoMedia = Constantes::$DIR_UPLOAD.Constantes::$DIR_IMAGENS.Constantes::$IMG_ADM_DEFAULT;
            }

            $mediaBean->setCaminho($caminhoMedia);

            $usuarioBean->setStatus($statusBean);
            $usuarioBean->setMedia($mediaBean);
                       

            $clienteBean = new ClienteBean();
            
            $aviEmail = intval(parent::getValueInput('avisosPorEmail'));           
            if($aviEmail == 0) $aviEmail = Constantes::$NAO;
            
            $clienteBean->setAvisosPorEmail($aviEmail);
            
            /********************* INPORTANTE ************************/
            $clienteBean->setNumLances(Constantes::$NUM_LANCES_INICIAL);
            /********************* INPORTANTE ************************/
            
            $clienteBean->setUsuario($usuarioBean);
            $clienteBean->setPessoa($pessoaBean);
            
            $this->clienteService->salvar($clienteBean);

            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_SUCCESS, Constantes::$STR_MSG_SUCCESS));
            parent::chain('ClienteAction.listar');
            
        }catch(ValidatorException $vex){
            throw new ValidatorException($vex->getMessage());
        }catch(Exception $ex){
            parent::setValueOutput("msg", new MensagemMeta(Constantes::$MSG_ERROR, $ex->getMessage()));
            parent::voltar();                        
        }
    }

    public function getView() {
        return ClienteAction::$VIEW_CLIENTE;
    }
}
?>
